package com.cleaningcloud.cld.service;

import com.cleaningcloud.cld.domain.CldPayConfirm;
import com.cleaningcloud.cld.domain.CldPayDetails;
import com.cleaningcloud.cld.domain.dto.CldPayDetailsDto;

import java.util.List;
import java.util.Map;

/**
 * 薪酬管理Service接口
 *
 * @author cleaningcloud
 * @date 2024-11-08
 */
public interface ICldPayDetailsService {
    /**
     * 查询薪酬管理
     *
     * @param payDetailsId 薪酬管理主键
     * @return 薪酬管理
     */
    CldPayDetails selectCldPayDetailsByPayDetailsId(Long payDetailsId);

    /**
     * 查询薪酬管理列表
     *
     * @param cldPayDetails 薪酬管理
     * @return 薪酬管理集合
     */
    List<CldPayDetails> selectCldPayDetailsList(CldPayDetails cldPayDetails);

    /**
     * 新增薪酬管理
     *
     * @param cldPayDetails 薪酬管理
     * @return 结果
     */
    int insertCldPayDetails(CldPayDetails cldPayDetails);

    /**
     * 修改薪酬管理
     *
     * @param cldPayDetails 薪酬管理
     * @return 结果
     */
    int updateCldPayDetails(CldPayDetails cldPayDetails);

    /**
     * 批量修改薪酬明细
     *
     * @param list
     * @return
     */
    int batchUpdateCldPayDetails(List<CldPayDetails> list);

    /**
     * 批量删除薪酬管理
     *
     * @param payDetailsIds 需要删除的薪酬管理主键集合
     * @return 结果
     */
    int deleteCldPayDetailsByPayDetailsIds(Long[] payDetailsIds);

    /**
     * 删除薪酬管理信息
     *
     * @param payDetailsId 薪酬管理主键
     * @return 结果
     */
    int deleteCldPayDetailsByPayDetailsId(Long payDetailsId);

    /**
     * 根据业务id查询
     *
     * @param businessId
     * @return
     */
    CldPayDetails selectCldPayDetailsByBusinessId(Long businessId);

    /**
     * 实时薪酬列表
     *
     * @param cldPayDetailsDto
     * @return
     */

    List<Map<String, Object>> selectRealTimeSalaryGrouping(CldPayDetailsDto cldPayDetailsDto);

    /**
     * 累计薪酬列表
     *
     * @param cldPayDetailsDto
     * @return
     */
    List<Map<String, Object>> getCumulativeSalaryList(CldPayDetailsDto cldPayDetailsDto);


    /**
     * 累计薪酬列表 - 按项目查看
     *
     * @param projectId
     * @return
     */
    List<Map<String, Object>> getCumulativeSalaryByProjectId(CldPayConfirm cldPayConfirm);


    /**
     * 工资统计
     *
     * @param cldPayDetailsDto
     * @return
     */
    List<Map<String, Object>> selectSalaryStatistics(CldPayDetailsDto cldPayDetailsDto);


    /**
     * 项目考勤查看
     *
     * @param cldAttendanceDto
     * @return
     */
    Map<String, Object> getTableCalendarList(CldPayDetailsDto cldPayDetailsDto);

    /**
     * 在岗员工考勤查看 日历
     *
     * @param cldAttendanceDto
     * @return
     */
    Map<String, Object> getCalendarByStaffId(CldPayDetailsDto cldPayDetailsDto);


    /**
     * 薪资统计 - 头部
     *
     * @return
     */
    Map<String, Object> salaryHeadStatistics();
}
